package com.itheima.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 1.定义切入点
 * 2.定义通知
 * 3.定义切面，并声明为一个组件，其实就是让IOC加载
 * 4.启用AOP
 */
@Component
@Aspect  // 一个切面
public class AOPAdvice {
    //1.定义切入点
    @Pointcut("execution( * com.itheima.service.impl.*.*(..))")
    // 这个是一个空方法，代表是被拦截到的方法
    public void pt(){
        // 这里面不能加任何逻辑，仅仅是一个标记
    }
    // 2.定义通知：前置 后置
    long start = 0;
    @Before("pt()") // 前置通知：是在方法执行前执行
    public void start(){
        // 方法执行之前执行的
        System.out.println("start()....");
        start = System.currentTimeMillis();
    }
    // 中间是pt()-被拦截的方法
    @After("pt()") // 后置通知，是在方法执行完执行
    public void end(){
        System.out.println("end()....");
        System.out.println((System.currentTimeMillis()-start)+"耗时");
    }
}
